iT邦幫忙

2023 iThome 鐵人賽

DAY 19
1
SideProject30

製作適用於網頁的台灣登山地圖系列 第 19

[Day19] tilemaker 細部設定

  • 分享至 

  • xImage
  •  

前幾天都從需求出發,使用 tilemaker 製作圖磚並立即渲染到 Maplibre 的 Web Map 之中。

從源頭的 OSM 資料集到最後展示的地圖,大致會依照以下的流程:

workflow
(圖片來源:https://gdunlop.github.io/Vector-tiles-remixed/ )

tilemaker 發展至今日,圖中設定檔(config)的部分其實有相當多的部分可以討論。今天我們就根據相關文件,來講講一些需要注意的事,以及有什麼工具可以妥善處理 OSM 資料。

關於縮放等級(zoom level)

由於向量圖磚使用的 pbf 格式編碼非常高效,因此通常情況下,我們只需要產生縮放等級14(z14) 的圖磚即可。在地圖放到更大時,前端的渲染會持續使用 z14 的資料來產生畫面。

因此,我們在設定檔中將 Layer 的最大縮放等級設為14時,其實也就夠前端的渲染器來去繪製所有細節了。

可以使用 Shapefile

在上面的流程圖中你也看到了,tilemaker 雖然主要使用 OpenStreetMap 的 pbf 格式作為輸入,但也可以使用 Shapefile 作為 Layer 的資料來源(僅限座標系為 WGS84)。因為我們每次產製圖磚時,都希望使用最新的 OSM extract,因此我們可以將很少變化的物件直接放入 Shapfile 中,例如行政區界、海岸線,以及我們前幾天處理的山頂資料。

若要將 Shapefile 使用在某個 Layer 中,可以在 config.json 文件中這樣撰寫:

"urban_areas": {
  "minzoom": 11, "maxzoom": 14,
  "source": "data/urban_areas.shp",
  "simplify_below": 13, "simplify_level": 0.0003
},
"bridges": {
  "minzoom": 13, "maxzoom": 14,
  "source": "data/Bridges_WGS84.shp", 
  "source_columns": ["SAP_DESCRI"]
}

source_columns 可以指定要匯入哪些資料欄位。若要匯入 Shapfile 中資料的所有欄位,可以使用 "source_columns": true

關於 OSM 資料的處理

在 Lua 文件中,有許多實用的 function 可以篩選資料或新增 Layer,這邊提出幾個來講:

way:LayerAsCentroid("layer_name")

將線段或多邊形的質心,寫入指定的 Layer,這可以幫助前端在渲染時可以直接取用,形成 POI (Point of Interest)。

舉例來說,昨天的水域名稱即是用這種方法,寫入名為 water_name 的 Layer。

node:Id(), way:Id()

回傳物件的 OSM ID,這也讓使用者有機會在渲染後的地圖中,有機會利用 ID 到其它網站查詢,直接取得原始的 OSM 物件資訊。

node:ZOrder(number), way:ZOrder(number)

預設為 0,用於對 Layer 內的 Feature 進行排序。如果渲染引擎本身不支援依照屬性排序,則使用此功能可確保正確的渲染順序。因此可以確保渲染後,哪些物件一定保持在上方不會被覆蓋。

way:Centroid()

回傳中心點的座標(緯度與經度),目前我想不出來有什麼可以使用的地方...


上一篇
[Day18] 加入水域資料
下一篇
[Day20] 來改別人的 Code: tilemaker x OpenMapTiles
系列文
製作適用於網頁的台灣登山地圖25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言